package controllers;

import connectivity.Dbmanager;
import connectivity.QueryManager;
import java.io.*;
import java.util.LinkedList;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.swing.JOptionPane;
import models.User;
import tools.Encryptor;
import beans.InhoudBean1;

public class ChangeUserController extends HttpServlet {

    private Dbmanager dbManager;
    private QueryManager queryManager;
    private String address;
    HttpSession sessie;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
        sessie = request.getSession();
        User user = new User();

        dbManager = new Dbmanager();
        dbManager.openConnection();
        queryManager = new QueryManager(dbManager);

        if (request.getParameter("id") != null) {
            //Als er een id is meegegeven, worden de gegevens van de gebruiker opgehaald.
            int id = (int) Long.parseLong(request.getParameter("id"));

            user = queryManager.getuserbyid(id);
        }

        if (sessie.getAttribute("changeUser") != null) {
            user = (User) sessie.getAttribute("changeUser");
        }

        request.setAttribute("gebruiker", user);
        request.setAttribute("foutMelding", sessie.getAttribute("foutMelding"));

        String address = "/change_user.jsp";
        dbManager.closeConnection();
        RequestDispatcher dispatcher = request.getRequestDispatcher(address);
        dispatcher.forward(request, response); //Stuurt door naar de Gebruikers index

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {

        sessie = request.getSession();
        int userlevel = (Integer) sessie.getAttribute("userLevel");;
        User user = new User();
        dbManager = new Dbmanager();
        dbManager.openConnection();
        queryManager = new QueryManager(dbManager);
        String gebruikersnaam = "";
        String voornaam = "";
        String achternaam = "";
        String email = "";
        String wachtwoord = "";
        String wachtwoord2 = "";
        int ID = 0;
        int level = 1;
        boolean isEmpty = false;
        InhoudBean1 inhoud = (InhoudBean1) sessie.getAttribute("inhoud");


        if (!request.getParameter("gebruikersnaam").isEmpty()) {
            gebruikersnaam = request.getParameter("gebruikersnaam");
        } else {
            isEmpty = true;
            sessie.setAttribute("foutMelding", inhoud.getError6());
        }

        if (!request.getParameter("voornaam").isEmpty()) {
            voornaam = request.getParameter("voornaam");
        } else {
            isEmpty = true;
            sessie.setAttribute("foutMelding", inhoud.getError7());
        }

        if (!request.getParameter("achternaam").isEmpty()) {
            achternaam = request.getParameter("achternaam");
        } else {
            isEmpty = true;
            sessie.setAttribute("foutMelding", inhoud.getError8());
        }

        if (!request.getParameter("email").isEmpty()) {
            email = request.getParameter("email");
        } else {
            isEmpty = true;
            sessie.setAttribute("foutMelding", inhoud.getError9());
        }

        if (request.getParameter("level") != null) {
            try {
                level = Integer.parseInt(request.getParameter("level"));
                if(level > 3 || level < 1){
                    level = 1;
                }
            } catch (NumberFormatException ex) {
                isEmpty = true;
                sessie.setAttribute("foutMelding", inhoud.getError11());
            }
        } else if(userlevel == 3){
            isEmpty = true;
            sessie.setAttribute("foutMelding", inhoud.getError10());
        } else {
            level = 1;
        }

        if (request.getParameter("ID") != null) {
            ID = Integer.parseInt(request.getParameter("ID"));
        }
        
        user.setLevel(level);
        user.setGebruikersnaam(gebruikersnaam);
        user.setVoornaam(voornaam);
        user.setAchternaam(achternaam);
        user.setEmail(email);
        user.setID(ID);
        

        if (!request.getParameter("wachtwoord").isEmpty()) {
            if (!request.getParameter("wachtwoord2").isEmpty()) {
                wachtwoord = request.getParameter("wachtwoord");
                wachtwoord2 = request.getParameter("wachtwoord2");

                if (wachtwoord.equals(wachtwoord2) == true) {
                    wachtwoord = Encryptor.encrypt(wachtwoord);
                    user.setWachtwoord(wachtwoord);
                    queryManager.updatePassword(user);
                } else {
                    isEmpty = true;
                    sessie.setAttribute("foutMelding", inhoud.getError13());
                }
            } else {
                isEmpty = true;
                sessie.setAttribute("foutMelding", inhoud.getError12());
            }
        }

        if (!isEmpty) {
            queryManager.updateUser(user);
            if (userlevel > 1) {
                response.sendRedirect("manage_users");
            } else {
                response.sendRedirect("student_home.jsp");
            }
        } else {
            sessie.setAttribute("changeUser", user);
            response.sendRedirect("change_user?id=" + ID);
        }

        dbManager.closeConnection();
    }
}
